docs(agents): the commit-trailer exemption is a reporting one; the acceptance-notes heading is English at all five sites - #17023
Conversation
…all five sites The os-dev definition named the PR section `## 验收备注` while the language invariant admits Chinese on exactly four channels; devs were picking a side. The heading is now `## Acceptance notes` in the dev definition, the three SKILL.md sites (including the seat's ACCEPT read) and the runbook, rewritten in place with every line within the 120-byte cap; the four-channel list is not widened. Claude-Session: https://claude.ai/code/session_01HxLw5aKDPR5RJgyUR7Exkd Co-authored-by: Claude <noreply@anthropic.com>
…ir stays model-free AGENTS.md's sentence prescribed the model-free trailer pair and, in the same breath, exempted "the harness-written Co-Authored-By trailer", which carries a model name; two seats read it two ways. The sentence now says the exemption is about REPORTING (a harness-written trailer is not declared a deviation), the pair a seat writes stays model-free, and landed history is not rewritten. The runbook's deviation line and the dev definition's commit clause say the same in place, and the partof gate's verbatim citation of that clause follows it. Claude-Session: https://claude.ai/code/session_01HxLw5aKDPR5RJgyUR7Exkd Co-authored-by: Claude <noreply@anthropic.com>
…ailer-and-acceptance-heading
维护者速读 — PR #17023(#16814 + #16807 折叠,skills 席终稿,2026-09-09T02:56Z)改了什么 — 两条「一处规则多份副本互相打架」的文本对齐。① commit trailer 句: 为什么改 — ① 在 objectui main 上已实测:同一 PM 会话六小时内两个 squash 落了两种 trailer 形状(一个带模型名、一个不带);规则不决定,各席自己决定。② 本轮 dev 报告里两种标题并存,未来任何按标题做的普查都会漏一半。 风险与代价(含回滚) — 纯指令文本,不改任何门禁行为、不发布;回滚 = revert 本 PR。代价:三处 120 字节顶格的行各删了一个虚词(时 / 其中 / 发现)来装下英文标题,无规则丢失。已落地的历史 trailer 不动。 席位意见 — 接受。本席在分支头上复核: 你要做的 — 合并;或由 os-zhuang / hotlong 批准,本席随即入队。看一处即可:AGENTS.md 442–444 的新句是否就是你要的规则(trailer 一律不带模型名;harness 自动加的不算 dev 的偏差)。 Generated by Claude Code |
Fixes #16814
Fixes #16807
Two rules were each stated in several places whose copies disagreed, and every seat resolved them alone. This PR aligns every copy of both in one pass, in place, with every edited line inside the 120-byte cap and every file at its unchanged line ceiling (AGENTS.md 1068, os-dev.md 403, SKILL.md 811, dispatch-runbook.md 241). Governed surfaces: draft, human merge,
skip-changeset(nothing a package'sfiles[]ships moves;skills/**is untouched, see the mirror probe below).1. Commit-trailer sentence — the exemption is a REPORTING one (Reading A)
Ruling applied verbatim from the chain head's grading comment: Reading A is canonical — the trailer pair is written model-free, and the runbook's 「⛔ 不再申报为偏差」 is a reporting exemption (do not file a deviation when the harness emits its own trailer), never a licence to emit a model identifier. Landed history is not rewritten, and the text deliberately says nothing about whether a squash normalises trailers (objectui
mainholds both shapes six hours apart).Angle-bracket tokens in the listing below are spelled as placeholders (
session_ID,NOREPLY_ADDR) per the body-bytes rule; the files carry the real tokens.AGENTS.md:442\Co-authored-by: Claude NOREPLY_ADDR`; no model identifier lands in a PR title or` (92)\Co-authored-by: Claude NOREPLY_ADDR`; no model identifier lands in a PR title or body,` (98)AGENTS.md:443body, a comment, a changeset, a doc or a code comment — the harness-written \Co-Authored-By`` (94)a comment, a changeset, a doc or a code comment. The one exemption is a REPORTING one: a harness-written(104)AGENTS.md:444trailer (with its session link) is the one exemption.(53)\Co-Authored-By` trailer is not declared a deviation; the pair stays model-free; landed history is not rewritten.` (113)references/dispatch-runbook.md:216- 两条豁免同属规则,⛔ 不再申报为偏差:一是 commit 的 \Co-Authored-By` 尾注(含 session 链接)。` (117)- 豁免不再申报为偏差:一是 harness 的 \Co-Authored-By` 尾注,免的是申报,trailer pair 仍 model-free。` (119).claude/agents/os-dev.md:281- PR 正文与 commit message 分开解析:卡片关系只在正文声明一次,commit ⛔ 不带卡片 trailer。(114)- 卡片关系只在 PR 正文声明一次:commit ⛔ 不带卡片 trailer,其 trailer pair 一律 model-free。(112)AGENTS.md:440-441and runbook:215/:217are byte-identical;:217's 「另一条是」 still attaches to:216's 「一是」.Bounded in-place fix outside the claimed file surface —
scripts/check-partof-closing-keyword.mjs. ItsRELATION_CONTRACTquotes the os-dev.md:281 sentence verbatim inside corner brackets, and its self-test holds every quoted sentence to the cited file (citedSentencessplits on 。 and checksincludes). Rewriting :281 turned that case red —✗ every sentence inside the corner brackets is verbatim in the cited rules file (got [the old sentence], want []), 1 of 95 — which is the mirror the dispatch did not know about. The four bounded-fix conditions hold: same defect class (a copy of a rule that stopped agreeing with its source), mechanical with a pinned shape (the quotation and its English gloss follow the new sentence), no open PR touches the file (18 open PRs' file lists read via REST at 02:14Z), and its own self-test is already in the dispatched gate family. After the fix:✓ check-partof-closing-keyword self-test: 95 cases pass.. The claim's declared file surface needs this file added (the PM's write).2. Acceptance-notes heading —
## Acceptance notesat all five sites (route 1)The four-channel list (
SKILL.md:95) is untouched — no fifth channel. Each site is rewritten in place; where the 4-byte growth of the heading token did not fit under the cap, one word on the same line pays for it..claude/agents/os-dev.md:48- 它们进 PR \## 验收备注`,报告 `out_of_scope_findings` 记 `noted, not filed: …`,席位 ACCEPT 时读。` (118)- 它们进 PR \## Acceptance notes`,报告 `out_of_scope_findings` 记 `noted, not filed: …`,席位 ACCEPT 读。` (119)SKILL.md:348- (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR \## 验收备注`,⛔ 不立卡。` (114)- (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR \## Acceptance notes`,⛔ 不立卡。` (118)SKILL.md:352- 判「进验收备注」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。(113)- 判「进 Acceptance notes」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。(118)SKILL.md:778- 席位在 ACCEPT 读 PR \## 验收备注`,其中实属三类的由席位补立;三类外已立的卡关 not planned。` (120)- 席位在 ACCEPT 读 PR \## Acceptance notes`,实属三类的由席位补立;三类外已立的卡关 not planned。` (118)references/dispatch-runbook.md:30- N 项之外零改动且 PR 自证;范围外发现按立卡三类门槛分流,三类外进验收备注、不单开。(118)- N 项之外零改动且 PR 自证;范围外按立卡三类门槛分流,三类外进 Acceptance notes、不单开。(117)Evidence at
4d41829b:git grep -c 验收备注→ 0 files;git grep -n 'Acceptance notes' -- AGENTS.md .claude→ exactly the 5 sites above (AGENTS.md:212already said "acceptance notes" in lowercase prose and is unchanged).Mechanism assumptions, measured
grep -rn "验收备注|model-free|Co-authored-by|Co-Authored-By|Acceptance notes|trailer" skills/objectstack-pm-dispatch/→ exit 1, 0 lines. The dispatch's positive controlos-dev-reportalso returns 0 there, so it was not a control;decision_frame(2 hits:SKILL.md:623,rules/dev-template.md:99) and the literal Fixes-hash control (3 hits) are. ⇒skills/**untouched, no token-ratchet reading owed.✓ check-skill-line-ratchet: declared cross-file moves: 1, total ceilings down 9 lines..git merge origin/main(9294959) before opening — it brought PR skills(pm-dispatch): clause-② cards build at the default tier and are gated by the contract review at CONTRACT_REVIEW_TIER (#16905) #16915's SKILL.md lines 514–522 / 639–640 / 675 (net zero below :348 and above :778; file still 811 lines); the three heading sites were relocated by content and hold. Merge commit4d41829b, noos-regen-pendingdebt.sed -n '734,752p' SKILL.md | md5sum→22f2339f0acb64cdb50c7adc9db681c3before the edits (unchanged by this PR);check:skill-frame-syncgreen.Gates — union run on
4d41829b(after the final commit)node scripts/pm/dispatch-gates.mjs --commandson tree4d41829bderives 42 families (the 20 the dispatch named plus 22 pulled in by the gate-script edit); all 42 ran, exit codes captured before any pipe, all 0;dispatch-gates.mjs --ran:Run reconciliation — 42 derived, 42 run, 0 NOT-MEASURED, 0 UNRUN. The formula gate ran after its own prescribed build (turbo run build --filter=@objectstack/formula --filter=@objectstack/lint, underos-verify-lock.sh:VERDICT command-exit 0, held 222 s, waited 339 s). Extra, not derived:check:pm-half-states(names the partof script) — 2749 cases pass. No package is touched, so no build closure or package test is owed; the widercheck:*farm is CI's.Acceptance notes
:215(「模型标识只禁内容工件」) reads alone as scoping the ban to content artefacts; with:216now stating the trailer pair is model-free the pair of lines is consistent, but:215on its own still invites the old reading. Carrier: the skills seat, next time the runbook's model-identifier lines move (the ruling named:216as the line to change;:215was left byte-identical on purpose).Co-Authored-Bytrailer and a different footer form; the commits here carry the model-free pair per Reading A, so nothing was declared — the reporting exemption at work, and the sentence it names. Carrier: none (the template lives outside the repo).docs/audits/2026-09-self-test-shape-census.mdnames the partof script; its case count is unchanged (95), so the census does not drift. Carrier: none.维护者速读(草稿)
改了什么:把两条「同一规则写在多处、多处不一致」的文本对齐。一是 commit 尾注规则:AGENTS.md、派发 runbook、os-dev 定义三处现在都说清「豁免的是申报,不是模型名」——尾注对一律不带模型名,harness 自己发出的尾注不用申报偏差,已落地的历史不改写;守这句话的 CI 门禁(partof)里引用的原句同步跟上。二是 dev 报告里「验收备注」小节标题改成英文
## Acceptance notes,五处同笔改,四通道中文清单不动。为什么改:两条规则各自在多处的副本互相矛盾,每个席位只能自己选边——objectui 主干六小时内落了两种尾注形状,dev 报告里两种标题并存。改文本比让每个席位反复判断便宜,而且只改文本、零运行期影响。
风险与代价(含回滚):纯文本改动,不动任何发布包,
skip-changeset;每个文件行数不变、每行 ≤120 字节,棘轮门禁全绿。回滚就是 revert 本 PR(注意 partof 门禁脚本里的引用句要一起回滚,否则它的自检会红)。已落地的 commit 历史不受影响。席位意见:(留空)
你要做的:受管面,需你人工合并;若认为「Reading A」这一读法不是你的本意(即允许 harness 的模型名尾注),请在合并前指出,文本会改回另一读法。
Generated by Claude Code